/**
    算法描述：维护一个数组，存放每个数对应位置的最长序列数目
    核心问题：当一个数比前面数字大时，可以直接加上该数字对应的长度+1
    解决所需数据结构+算法：数组 + 动态规划
**/
#include<iostream>
using namespace std;

int main() {
    int n, M = -1, a[1001] = {0}, b[1001] = {0};
    cin >> n;
    for (int i=0; i<n; i++) {
        cin >> a[i];
        b[i] = 1;
    }

    // core code
    for (int i=1; i<n; i++) {
        for (int j=0; j<i; j++) {
            if (a[i] > a[j]) {
                b[i] = max(b[i], b[j] + 1);
                M = max(M, b[i]);
            }
        }
    }
    cout << M << endl;
    
    return 0;
}